package com.founding.rabbitmq.simple;

import com.founding.rabbitmq.utils.ConnectionUtil;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.*;

import java.io.IOException;


public class Consumer {
    //自定义队列名称,跟生产者队列名称保持一致
    static final String QUEUE_NAME="simple_queue";

    public static void main(String[] args) throws Exception {
        //调用写好的工具类,获取连接对象
        Connection connection = ConnectionUtil.getConnection();
        //创建频道
        Channel channel = connection.createChannel();
        //声明(创建队列)队列
        /**
         * 参数1:队列名称
         * 参数2:是否定义持久化队列
         * 参数3:是否独占本次连接
         * 参数4:是否在不使用的时候自动删除队列
         * 参数5:队列其他参数
         */
        channel.queueDeclare(QUEUE_NAME,true,false,false,null);

        //创建消费者并且设置消息处理
        DefaultConsumer consumer=new DefaultConsumer(channel){
            /**
             *
             * @param consumerTag 消息者标签，在channel.basicConsume时候可以指定
             * @param envelope 消息包内容，可以从中获取消息id,消息routingkey,交换机,消息和重传标志(
             *                 收到消息失败后是否需要重新发送)
             * @param properties 属性消息
             * @param body 消息
             * @throws IOException
             */
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                //路由key
                System.out.println("路由key为:"+envelope.getRoutingKey());
                //交换机
                System.out.println("交换机为:"+envelope.getExchange());
                //消息id为
                System.out.println("消息id为:"+envelope.getDeliveryTag());
                //收到的消息为
                System.out.println("接受到的消息为:"+new String(body,"utf-8"));
            }
        };
        //监听消息
        /**
         * 参数1:消息队列
         * 参数2:是否自动确认,设置为true为表示消息接收到自动时间向mq回复接收到了,mq接收到回复会删除消息,设置为false则需要手动确认
         * 参数3:消息接收到后回调
         */
        channel.basicConsume(QUEUE_NAME,true,consumer);

        //不关闭资源，应该一直监听消息
        //channel.close();
        //connection.close();
    }
}
